<?php

namespace App\Service;


use Illuminate\Support\Env;

class QRcode
{


    // 生成二维码
    public function getQR($uid)
    {
        // 各种参数
        $text   = 'https://www.shenlanhui.com/'.$uid.'.html';  //二维码内容
        $text   = 'https://shenlanhui.com/download.html';  //二维码内容
        $size   = 6;  //生成图片大小
        $domain = 'http://slh.shenlannews.com';
        $domain = Env::get('STYLE_HOST');
        $domain = substr($domain, -1) == '/' ? substr($domain, 0, -1) : $domain;

        $path   = public_path();  // 根目录路径
        $logo   = '/static/logo.png';    //准备好的logo图片
        $QRFile = '/qrcode/'.$uid.'.png';  // 已经生成的原始二维码图
        $logoQR = '/qrcode/'.$uid.'_logo.png';  // 生成的二维码图片位置

        // 判断二维码是否存在
        if(empty($logo) && is_file($domain.$QRFile)){
            return $domain.$QRFile;
        }
        if($logo && is_file($domain.$logoQR)){
            return $domain.$logoQR;
        }

        //生成二维码图片
        $this->makeQR($text, $path.$QRFile, $size);
        if(empty($logo)){
            return $domain.$QRFile;
        }

        // 生成带logo的二维码
        if(is_file($path.$QRFile)){
            $this->makeLogoQR($path.$QRFile, $path.$logo, $path.$logoQR);
        }

        return $domain.$logoQR;
    }

    // 生成二维码
    protected function makeQR($text, $QRFile, $size)
    {
        $errorLevel = 'L';  //容错级别
        \PHPQRCode\QRcode::png($text, $QRFile, $errorLevel, $size, 2);
    }


    /**
     * 生成带logo的二维码（在二维码上面贴上logo）
     * @param $QRFile  已经生成好了的二维码图片文件
     * @param $logoFile logo图片
     * @return void
     */
    protected function makeLogoQR($QRFile, $logoFile, $toFile)
    {
        // 打开生成的二维码图片 与 logo图片
        $QR   = imagecreatefromstring(file_get_contents($QRFile));
        $logo = imagecreatefromstring(file_get_contents($logoFile));
        // 调整二维码内部的logo
        $QR_width       = imagesx($QR);  // 二维码图片宽度
        $QR_height      = imagesy($QR);  // 二维码图片高度
        $logo_width     = imagesx($logo);  // logo图片宽度
        $logo_qr_width  = $QR_width / 5;   // 二维码中logo的宽度
        $from_width     = ($QR_width - $logo_qr_width) / 2; // 二维码中logo的起始位置
        $logo_height    = imagesy($logo);      //logo图片高度
        $scale          = $logo_width / $logo_qr_width;  // logo的长宽比例
        $logo_qr_height = $logo_height / $scale;  // logo的应该的宽度

        //重新组合图片并调整大小
        imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
        //输出图片
        imagepng($QR, $toFile);
    }

}

